NAUD Cyril - MP
TIPE 2009/2010

Loxodromie et orthodromie

v2.0 (19/03/2010)

I  Préliminaires

A) Modélisation de la Terre

On considère la Terre comme une sphère parfaite, de rayon R=6378 km.La Terre est dotée d'un système de coordonnées géographiques, qui est une variante du sysème de coordonnées sphériques classique. Ce système de coordonnées est décrit ci-dessous. ϕ représente la latitude d'un point à la surface de la Terre et θ représente sa longitude; la latitude et la longitude étant habituellement en degrés, on utilisera cette unité pour toutes les valeurs d'angles. On obtient les formules de passage entre coordonnées géographiques et coordonnées cartésiennes en passant par les coordonnées sphériques.

({{Coordonnées cartésiennes, Coordonnées géographiques}, {x=r.cosΦ.cosΘ, ρ=√(x²+y²+z²)}, {y=-r.cosΦ.sinΘ, Φ=90-arccos(z/ρ)}, {z=r.sinΦ, Θ=arccos(x/√(x²+y²))}})
Figure 1:Système de coordonnées géographiques

B) Le mille marin

Le mille marin est l'unité de distance couramment utilisée en navigation. Un mille marin correspond à la longueur d'un arc d'une minute sur un méridien. Un méridien mesurant 20000 km, un mille marin vaut donc environ 1,852 km.

II La loxodromie

A) Définition

Sur une sphère, la loxodromie est la courbe reliant deux points en coupant les méridiens sous un angle constant. Sur une carte de Mercator (un planisphère classique), une loxodromie est représentée par une droite (cf figures 2 et 3).Contrairement à ce que l' on pourrait croire, la loxodromie n'est pas la trajectoire la plus courte reliant deux points sur Terre.

Figure 2 : la loxodromie (en bleu) et l'orthodromie (en rouge) reliant Paris et Los Angeles   
Figure 3 : une loxodromie (en rouge) et une orthodromie (en vert) sur une sphère

B) Calcul de la longueur de la loxodromie

1)Paramétrage de la loxodromie
	Le cap étant toujours constant, il est facile de paramétrer la loxodromie. Les coordonnées d'un point M appartenant à la loxodromie reliant les points A et B sont:

latM = latA + t (latB - latA)
longM = longA + t (longB - longA)
t variant de 0 à 1 (pour t = 0, M = A et pour t = 1, M = B).

Pour simplifier le calcul, on prend les points A' et B', qui sont les points A et B translatés sur leur parallèle, de façon que la différence entre leur longitude soit la même que celle entre A et B mais de sorte que la longitude de A soit égale à 0. On a donc longA' = 0 et longB' =     longB - longA, les latitudes étant conservées. On obtient ainsi :

latM = latA + t (latB - latA)
longM = tlongB'
(t varie entre 0 et 1)

On peut ainsi paramétrer la loxodromie AB dans le repère cartésien :

xM = R.cos (latA + t.(latB - latA)).cos (t.long' B)
yM = R.cos (latA + t.(latB - latA)).sin (t.long' B)
zM = R.sin (latA + t.(latB - latA))

2)Longueur de la loxodromie
	La longueur d'un arc paramétré est égale à l'intégrale sur l'intervalle de définition de la norme de la dérivée de la fonction définissant l'arc(L=(∫_I)||f'(t)||dt).

On obtient donc loxo (A,B)=(∫_0^1)√[(latB-latA)^2+((longB-longA)*cos(latA+t*(latB-latA)))^2]dt

III L'orthodromie

A) Définition

L'orthodromie est la trajectoire la plus courte entre 2 points sur une sphère. C'est le trajectoire suivant le cercle passant par les 2 points, ayant pour rayon le rayon de la Terre et pour centre le centre de la Terre (cf figures 2 et 3 au dessus).

B) Calcul de la longueur de l'orthodromie

1) Calcul de la longueur du segment AB

On transforme les coordonnées sphériques en coordonnées cartésiennes.  Pour simplifier les calculs, on pose R=1. On obtient alors

xA = cos[latA]*cos[longA]
yA = -cos[latA]*sin[longA]
zA = sin[latA]

xB = cos[latB*cos[longB]
yB = -cos[latB]*sin[longB]
zB = sin[latB]

On peut ainsi calculer AB² : AB² = (xB - xA) ² + (yB - yA) ² + (zB - zA) ²

En développant et en simplifiant, on obtient AB² = 2 (1 - cos[latA] cos[latB] cos[longA - longB] - sin[latA] sin[latB])

2) Lien entre la longueur du segment AB et la longueur de l'arc AB

On se place dans le plan contenant le cercle par lequel passe l' orthodromie.

On note h = AB/2 et I milieu de AB. O représente le centre de la Terre.
Ayant pris 1 pour rayon, on a donc la longueur de l' arc AB qui est égale à la moitié de l' angle au centre (AÔB).
On obtient donc longueur_arc (AB) = AÔB/2 = θ = 2 arcsin (AB/2) = 2 arcsin (h)

3)Simplification

Pour simplifier la formule ci-dessus, on utilise la relation cos 2u = 1-2 sin²(u). Ce qui donne:

cos 2 arcsin (h) = 1 - 2 sin² (arcsin (h)) = 1 - 2 h²
2 arcsin (h) = arccos (1 - 2 h²)
arc (AB) = arccos (1 - (1 - cos[latA] cos[latB] cos[longA - longB] - sin[latA] sin[latB]))
arc (AB) = arccos (cos[latA] cos[latB] cos[longA - longB] - sin[latA] sin[latB])

En multipliant cette relation par le rayon de la Terre, on obtient la formule permennant de déterminer la longueur de l' arc AB :               				arc (AB) = R*arccos (cos[latA] cos[latB] cos[longA - longB] - sin[latA] sin[latB])
        
	Pour convertir en milles marins, il faut de nouveau multiplier par 180*60/ℼR. Le 180/ℼ disparaît en utilisant les degrés. On obtient donc la formule permettant de mesurer la longueur d' une orthodromie.

ortho(A,B)=60arccos[cos(latA).cos(latB).cos(longB-longA)+sin(latA).sin(latB)]

IV Entre l'orthodromie et la loxodromie...

A) Préliminaires

On définit dans cette partie quelques fonctions Mathematica permettant le calcul de loxodromies et d' orthodromies.

1) Rayon de la Terre

On pose R la variable représentant le rayon de la Terre.

R=6378

2) Fonctions trigonométriques

Comme énoncé dans l' introduction, on utilise les degrés pour mesurer les angles. Mathematica utilisant le radian comme unité de référence, il est nécessaire de créer de nouvelles fonctions correspondant aux fonctions trigonométriques de base s'appliquant au degré.

cosDeg[x_]:=N[Cos[Pi*x/180]]

sinDeg[x_]:=N[Sin[Pi*x/180]]

arccosDeg[X_]:=N[(180/Pi)*ArcCos[X]]

arcsinDeg[X_]:=N[(180/Pi)*ArcSin[X]]

3) Fonctions loxo et ortho

On crée deux fonctions permettant de calculer la longueur d' une loxodromie ou d' une orthodromie entre 2 points A et B : loxo prend en paramètre les coordonnées des 2 points A et B et renvoyant la longueur de la loxodromie entre A et B, et ortho fait de même en renvoyant la longueur de l'orthodromie entre A et B.

loxo[{latA_,longA_},{latB_,longB_}]:=Re[N[60*(∫_0^1)Sqrt[(latB-latA)^2+((longB-longA)*Cos[(latA*Pi/180+t*(latB-latA)*Pi/180)])^2]\[DifferentialD]t]]

ortho[{latA_,longA_},{latB_,longB_}]:=N[60*arccosDeg[cosDeg[latA]*cosDeg[latB]*cosDeg[longB-longA]+sinDeg[latA]*sinDeg[latB]]]

B) Dichotomie

1) Principe

Bien que l'orthodromie soit la trajectoire la plus courte entre deux points, elle est difficile à suivre pour un marin car elle impose de changer constamment de cap, contrairement à la loxodromie dont le cap reste constant tout au long du parcours.
	Pour pouvoir réduire la longueur du parcours, on peut par exemple procéder par dichotomie : au lieu de suivre la même loxodromie, on peut suivre deux portions de loxodromie: la première reliant le point de départ au milieu de l'orthodromie et la deuxième reliant ce milieu au point d'arrivée. On peut ensuite répéter ce processus pour réduire de nouveau la longueur du trajet.

Exemple : trajet Paris - Los Angeles

La courbe bleue correspond à la loxodromie, la courbe rouge à l'orthodromie et la courbe noire à la "semi-loxodromie", reliant tout d'abord Paris au milieu de l'orthodromie puis ce milieu à Los Angeles.

Coordonées des points:
           * Paris : latitude :48,8667
                        longitude : -2,3333
           *Los Angeles : latitude : 34,0522
                                  longitude : 118,2428
           *Milieu de l'orthodromie (calculé grâce à la fonction ci-dessous) : latitude : 60,2189
                                                                                                                longitude : 83,7084

Calculons les longueurs des différents trajets.

1) La loxodromie

loxo [{48.8667,-2.3333},{34.0522,118.2428}]

2)L'orthodromie

ortho [{48.8667,-2.3333},{34.0522,118.2428}]

3) La "semi-loxodromie"

loxo[{48.8667,-2.3333},{60.2189,83.7084}] + loxo[{60.2189,83.7084},{34.0522,118.2428}]

La trajectoire optimisée permet ainsi de gagner 305 milles sur la loxodromie (gain de 5,6%), mais l'orthodromie est encore plus courte de 273 milles.

2) Recherche du milieu de l'orthodromie

Pour trouver le milieu d' une orthodromie entre deux points A et B, on transforme tout d'abord les coordonnées géographiques de A et de B en coordonnées cartésiennes pour trouver le milieu de [AB]. Ce point étant aligné avec le milieu de l'orthodromie et le centre de la Terre, sa latitude et sa longitude sont les mêmes que le milieu de l'orthodromie.

On part des coordonnées géographiques des points A et B : (latA, longA) et (latB, longB). On transforme ensuite ces coordonnées géographiques en coordonnées cartésiennes.

xA = R*cos[latA]*cos[longA]
yA = -R*cos[latA]*sin[longA]
zA = R*sin[latA]

xB = R*cos[latB*cos[longB]
yB = -R*cos[latB]*sin[longB]
zB = R*sin[latB]

On calule ensuite les coordonnées de T , milieu de [AB], en coordonnées cartésiennes.

xT = (xA + xB)/2
yT = (yA+yB)/2
zT = (zA+zB)/2

On transforme ensuite ces coordonnées cartésiennes en coordonnées géographiques. Ces coordonnées sont celles du milieu de l'orthodromie.

latT = 90 - arccos[zT/√(xT² + yT² + zT²)]
longT = arccos[xT/(xT² + yT²)]

3) Nouvelles fonctions

On définit de nouvelles fonctions Mathematica pour permettre le calcul du milieu d' une orthodromie.

La fonction geotocart transforme les coordonées géographiques d' un point en ses coordonnées cartésiennes.

geotocart[{lat_,long_}]:={R*cosDeg[lat]*cosDeg[long],-R*cosDeg[lat]*sinDeg[long],R*sinDeg[lat]}

Réciproquement, la fonction carttogeo transforme les coordonnées cartésiennes d' un point en ses coordonnées géographiques.

carttogeo[{x_,y_,z_}]:={90-arccosDeg[z/Sqrt[x^2+y^2+z^2]],arccosDeg[x/Sqrt[x^2+y^2]]}

On peut ainsi écrire la fonction milieuorthodromie, prenant en paramètre les coordonnées de deux points A et B et renvoyant le milieu de l' orthodromie les reliant.

milieuorthodromie[{latA_,longA_},{latB_,longB_}]:=Module[{a=geotocart[{latA,longA}],b=geotocart[{latB,longB}]},
carttogeo[(a[[1]]+b[[1]])/2,(a[[2]]+b[[2]])/2,(a[[3]]+b[[3]])/2]]

4) Conclusion

On peut finalement écrire une fonction semiloxo, prenant en paramètre les coordonnées de 2 points et renvoyant les longueurs de l'orthodromie, de la loxodromie et de la "semi-loxodromie" ainsi que l'écart (en pourcentage) entre les longueurs des différents trajets et la longueur de l'orthodromie. La fonction indique également le point de passage de la "semi-loxodromie", qui est le milieu de l'orthodromie où se rejoignent les 2 portions de loxodromie.

semiloxo[{latA_,longA_},{latB_,longB_}]:=Module[{sl={loxo [{latA,longA},{latB,longB}], ortho [{latA,longA},{latB,longB}],loxo [{latA,longA},milieuorthodromie[{latA,longA},{latB,longB}]]+loxo [milieuorthodromie[{latA,longA},{latB,longB}],{latB,longB}]},m=milieuorthodromie[{latA,longA},{latB,longB}]},
Print["Orthodromie : ",sl[[2]]," milles"];
Print["Loxodromie : ",sl[[1]]," milles (+ ",100*(sl[[1]]-sl[[2]])/sl[[2]],"%)"];
Print["Semi loxodromie : ",sl[[3]]," milles(+ ",100*(sl[[3]]-sl[[2]])/sl[[2]],"%)"];
Print ["Point de passage : ",m]]

Exemple avec le trajet Paris - Los Angeles :

semiloxo[{48.8667,-2.3333},{34.0522,118.2428}]

C) Répétition de la dichotomie

1) Principe

Après avoir obtenu la "semi-loxodromie", on peut répéter de nouveau le processus sur chacun des 2 portions de loxodromie, et ainsi de suite jusqu'à atteindre la longueur désirée (qui doit cependant être supérieure à la longueur de l'orthodromie).

2) Fonction

La fonction opti ci - dessous prend en paramètre les coordonnées géographiques d' une liste de points ainsi qu' une distance étant le but de distance de parcours à atteindre par dichotomies successives. La fonction calcule tout d' abord la longueur du trajet formé des loxodromies reliant deux points consécutifs de la liste : si cette distance est inférieure à la distance - but, la liste des points est renvoyée, sinon on appelle de nouveau la fonction avec une nouvelle liste de points créée par la fonction auxilliaire optiaux qui insère entre deux points de la liste le milieu de l' orthodromie reliant ces deux points.

optiaux[l_]:=Module[{j=1,m={}},While[j<=2*Length[l]-1,If[OddQ[j],AppendTo[m,l[[(j+1)/2]]],AppendTo[m,milieuorthodromie[l[[j/2]],l[[(j/2)+1]]]]];j++];m]

opti[l_,s_]:=
Module[
{d=Sum[loxo[l[[i]],l[[i+1]]],{i,Length[l]-1}],m={}},
If [d<s,l,opti[optiaux[l],s]]]

Exemples :

*Pour une distance - but de 5400 milles : la distance - but est supérieure à la loxodromie mais est inférieure à la "semi-loxodromie"; c'est donc cette dernière distance qui est renvoyée.

opti[{{48.8667,-2.3333},{34.0522,118.2428}},5400]

*Pour une distance - but de 5100 milles : la distance - but est supérieure à la "semi-loxodromie", il faut donc réaliser une nouvelle dichotomie : on obtient ainsi une liste de 5 points.

opti[{{48.8667,-2.3333},{34.0522,118.2428}},5100]

opti[l_, s_] :=
 Module[
  {d = Sum[loxo[l[[i]], l[[i + 1]]], {i, Length[l] - 1}], m = {}},
  If [d < s, l, opti[optiaux[l], s]]]
  
  optiaux[l_] := Module[{j = 1, m = {}}, While[j <= 2*Length[l] - 1, If[OddQ[j], AppendTo[m, l[[(j + 1)/2]]], AppendTo[m, milieuorthodromie[l[[j/2]], l[[(j/2) + 1]]]]]; j++]; m]